package com.lmaye.design.patterns.creation.singleton;

import java.util.Objects;

/**
 * -- 懒汉式
 * - 线程不安全，同步代码块(不要使用)
 *
 * <pre>
 *     优点：
 *     - 实现了懒加载效果
 *     缺点：
 *     - 在多线程的情况下还是不安全的
 * </pre>
 *
 * @author lmay.Zhou
 * @date 2020/11/13 15:37 星期五
 * @qq 379839355
 * @email lmay@lmaye.com
 * @since JDK1.8
 */
public class SingletonLazy03 {
    private static SingletonLazy03 instance;

    private SingletonLazy03() {
        System.out.println("SingletonLazy03 Create");
    }

    public static SingletonLazy03 getInstance() {
        System.out.println("SingletonLazy03 Get Instance");
        if(Objects.isNull(instance)) {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            // 虽然同步了实例化代码块，但在多线程同时进入此代码块时，还是会继续实例化
            synchronized (SingletonLazy03.class) {
                instance = new SingletonLazy03();
            }
        }
        return instance;
    }
}
